package com.zshy.base.monitor.domain.sender.factory;

import com.zshy.base.monitor.domain.contract.command.*;
import lombok.extern.slf4j.Slf4j;

/**
 * 消息发送者
 *
 * @author zhouhengzhe
 */
@Slf4j
public abstract class AbstractSender implements Sender {

    /**
     * 发送link 类型消息（钉钉）
     * <a href="https://open.dingtalk.com/document/orgapp/message-types-supported-by-enterprise-internal-robots#title-ymf-os7-j0c">...</a>
     *
     * @param command 消息内容
     * @return 是否发送成功
     */
    @Override
    public Boolean sendMessageByLink(SendMessageByLinkCommand command) {
        log.warn("企业微信暂未实现发送link类型消息");
        return Boolean.FALSE;
    }

    /**
     * 发送ActionCard 类型消息（独立跳转actionCard类型）（钉钉）
     * <a href="https://open.dingtalk.com/document/orgapp/message-types-supported-by-enterprise-internal-robots#title-q1d-cx6-k3v">...</a>
     *
     * @param command 消息内容
     * @return 是否发送成功
     */
    @Override
    public Boolean sendMessageByActionCardSingle(SendMessageByActionCardSingleCommand command) {
        log.warn("企业微信暂未实现发送ActionCard 类型消息（独立跳转actionCard类型）");
        return Boolean.FALSE;
    }

    /**
     * 发送ActionCard 类型消息(整体跳转actionCard类型)（钉钉）
     * <a href="https://open.dingtalk.com/document/orgapp/message-types-supported-by-enterprise-internal-robots#title-q1d-cx6-k3v">...</a>
     *
     * @param command 消息内容
     * @return 是否发送成功
     */
    @Override
    public Boolean sendMessageByActionCardMulti(SendMessageByActionCardMultiCommand command) {
        log.warn("企业微信暂未实现发送ActionCard 类型消息(整体跳转actionCard类型)");
        return Boolean.FALSE;
    }

    /**
     * 发送feedCard 类型消息（钉钉）
     * <a href="https://open.dingtalk.com/document/orgapp/message-types-supported-by-enterprise-internal-robots#title-g93-70j-1qy">...</a>
     *
     * @param command 消息内容
     * @return 是否发送成功
     */
    @Override
    public Boolean sendMessageByFeedCard(SendMessageByFeedCardCommand command) {
        log.warn("企业微信暂未实现发送feedCard 类型消息");
        return Boolean.FALSE;
    }

    /**
     * 发送图片类型(企微)
     * <a href="https://developer.work.weixin.qq.com/document/path/99110#%E5%9B%BE%E7%89%87%E7%B1%BB%E5%9E%8B">...</a>
     *
     * @param command 图片（base64编码前）最大不能超过2M，支持JPG,PNG格式
     * @return 是否发送成功
     */
    @Override
    public Boolean sendMessageByImage(SendMessageByImageCommand command) {
        log.warn("钉钉暂未实现发送图片类型消息");
        return Boolean.FALSE;
    }

    /**
     * 图文类型 发送图文消息（企微)
     * <a href="https://developer.work.weixin.qq.com/document/path/99110#%E5%9B%BE%E6%96%87%E7%B1%BB%E5%9E%8B">...</a>
     *
     * @param command 图文内容图文类型
     * @return
     */
    @Override
    public Boolean sendMessageByNews(SendMessageByNewsCommand command) {
        log.warn("钉钉暂未实现发送图文类型消息");
        return Boolean.FALSE;
    }

    /**
     * 文件类型 发送文件消息（企微)
     * <a href="https://developer.work.weixin.qq.com/document/path/99110#%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B">...</a>
     *
     * @param command 图文内容图文类型
     * @return
     */
    @Override
    public Boolean sendMessageByFile(SendMessageByFileCommand command) {
        log.warn("钉钉暂未实现发送文件类型消息");
        return Boolean.FALSE;
    }

    /**
     * 语音类型 发送语音消息（企微)
     * <a href="https://developer.work.weixin.qq.com/document/path/99110#%E8%AF%AD%E9%9F%B3%E7%B1%BB%E5%9E%8B">...</a>
     *
     * @param command 语音内容
     * @return
     */
    @Override
    public Boolean sendMessageByVoice(SendMessageByVoiceCommand command) {
        log.warn("钉钉暂未实现发送语音类型消息");
        return Boolean.FALSE;
    }

    /**
     * 模版卡片类型（企微）
     * - 文本通知模版卡片
     * - 图文展示模版卡片
     *
     * <a href="https://developer.work.weixin.qq.com/document/path/99110#%E6%A8%A1%E7%89%88%E5%8D%A1%E7%89%87%E7%B1%BB%E5%9E%8B">...</a>
     *
     * @param command 模版卡片内容
     * @return
     */
    @Override
    public Boolean sendMessageByTemplateCard(SendMessageByTemplateCardCommand command) {
        log.warn("钉钉暂未实现发送模版卡片类型消息");
        return Boolean.FALSE;
    }
}
